/*
 *  Copyright (C) 2010 Fabien Renaud
 * 
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 * 
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 * 
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package com.boc.botv.dao;

import com.boc.botv.model.Bet;
import java.util.Date;
import java.util.List;
import org.hibernate.Session;

/**
 *
 * @author Fabien Renaud
 */
public interface BetDao {

  /**
   * Renvoi la liste de tous les paris.
   * @return La liste d tous les paris.
   */
  public List<Bet> getBets();

  /**
   * Renvoie un pari en fonction de son identifiant.
   * @param betId l'identifiant du pari.
   * @return true si le pari est bien renvoyé.
   */
  public Bet getBet(Integer betId);
  
  /**
   * Supprime un pari dans la base de donnéees.
   * @param bet le pari à supprimer.
   */
  public void deleteBet(Bet bet);

  /**
   * Enregistre un pari dans la base de donnéees.
   * @param bet le pari à enregistrer.
   */
  public void saveBet(Bet bet);

  /**
   * Met à jour un pari dans la base de donnéees.
   * @param bet le pari à mettre à jour..
   */
  public void updateBet(Bet bet);

  /**
   * Liste les paris liés à une sous-section.
   * @param subsection la sous-section commune à tous les paris listés.
   * @return la liste des paris liés à la sous-section.
   */
  public List<Bet> getBetsBySubsection(int subsection);

  /**
   * Retourne la liste des paris dont la date de création est dans un intervalle donné
   * @param firstDate la date de début de l'intervalle
   * @param lastDate la date de fin de l'intervalle
   * @return la liste des paris
   */
  public List<Bet> getBetsByCreationTime(Date firstDate, Date lastDate);

  /**
   * Retourne la liste des paris dont la date de début est dans un intervalle donné
   * @param firstDate la date de début de l'intervalle
   * @param lastDate la date de fin de l'intervalle
   * @return la liste des paris
   */
  public List<Bet> getBetsByStartTime(Date firstDate, Date lastDate);

  /**
   * Retourne la liste des paris dont la date de fin est dans un intervalle donné
   * @param firstDate la date de début de l'intervalle
   * @param lastDate la date de fin de l'intervalle
   * @return la liste des paris
   */
  public List<Bet> getBetsByEndTime(Date firstDate, Date lastDate);

  /**
   * Récupère les paris passés entre deux dates
   * @param firstDate la date de début
   * @param lastDate la date de fin
   * @return
   */
  public List<Bet> getBetsPlayedBetween(Date firstDate, Date lastDate);

  /**
   * Récupère les paris sur lesquels aucun joueur n'a misé entre deux dates
   * @param firstDate la date de début
   * @param lastDate la date de fin
   * @return
   */
  public List<Bet> getBetsNotPlayedBetween(Date firstDate, Date lastDate);

  /**
   *
   * @param numberOfBet
   * @return
   */
  public List<Bet> getBetsByCloserEndDate(int numberOfBet, int subsection);

  /**
   * 
   * @param subsection
   * @return
   */
  public List<Bet> getCurrentBetsBySubsection(int subsection);
}
